package com.example.administrator.appstpremvpdemo.manager;

import android.support.v4.app.FragmentActivity;

import com.example.administrator.appstpremvpdemo.view.activity.LaunchActivity;
import com.example.administrator.appstpremvpdemo.view.activity.MainActivity;

import java.util.Stack;

/**
 * @Author Administrator
 * @Date 2017/12/11
 * @description 为什么要自定义一个ActivityManager类，首先Android中每当创建一个Activity的时候
 * 系统都有一个管理类（APPManager）去自动帮我们管理（什么时候销毁，什么时候从栈中移除）。
 * 但实际开发中会遇到一个这样的场景，比如：你在看某条新闻的时候，想发表评论，
 * 然后经过一系列的注册界面，注册成功后再次跳转到这条新闻的页面。那么如果自定义了
 * 一个ActivityManager管理类以后，就可以在里面随意删除Activity从栈中把它移除掉，
 * 当你点击注册成功后，可以把一系列注册的界面都移除掉，露出你正在看的那条新闻页面。
 * @function 这是一个管理app中activity生命周期的管理类
 * 高效，可控地使用activity
 * @othors 可以考虑加上一些方法清除内存
 */

public class LocalActivityManager {

    private static LocalActivityManager localActivityManager = new LocalActivityManager();

    /**
     * 获取管理者实例
     *
     * @return activity管理者对象
     */
    public static LocalActivityManager getInctance() {
        return localActivityManager;
    }

    /**
     * 私有构造
     */
    private LocalActivityManager() {
    }

    private static Stack<FragmentActivity> activityStack = new Stack<>();//提供栈对象

    /**
     * 添加activity到管理栈中---压栈
     *
     * @param activity
     */
    public void addActivity(FragmentActivity activity) {
        if (activity != null) {
            activityStack.add(activity);
        }
    }

    /**
     * 删除栈中指定元素---弹栈
     *
     * @param activity
     */
    public void removeActivity(FragmentActivity activity) {
        activityStack.remove(activity);
    }

    /**
     * 取出栈顶元素
     *
     * @return FragmentActivity栈顶元素
     */
    public FragmentActivity getTopActivity() {
        return activityStack.size() <= 0 ? null : activityStack.get(activityStack.size() - 1);
    }

    /**
     * 清除栈中所有元素--清栈
     */
    public void clearAllactivity() {
        activityStack.removeAllElements();
    }

    /**
     * 用户点回退键时的情况处理，如果当前元素是不是主页面，并且栈中只有一个元素在活动
     * 这时候点击回退键应该让它跳转到主页面。
     */
    public void clickBack(FragmentActivity activity) {
        if (activity == null) {
            return;
        }
        if (activityStack.size() == 1 && activityStack.contains(activity) && !(activity instanceof MainActivity)
                && !(activity instanceof LaunchActivity)) {
            MainActivity.goTo(activity, MainActivity.class, true);
        }

        activity.finish();
        removeActivity(activity);
    }

    /**
     * 判断栈中是否还有activity在运行
     *
     * @return
     */
    public boolean isExistActivity() {
        return activityStack.size() == 0;
    }

    /**
     * 获取栈中元素数量
     *
     * @return activity数量
     */
    public int getTaskSize() {
        return activityStack.size();
    }

}
